import axios from 'axios'
// import { response } from 'express'
import qs from 'qs'

/**
 * 根据环境变量区分接口的默认地址
 */
switch (process.env.NODE_ENV) {
  case 'production':
    axios.defaults.baseURL = ''
    break
  case 'test':
    axios.defaults.baseURL = ''
    break
  default:
    axios.defaults.baseURL = ''
}

/**
 * 设置超时请求时间和跨域是否允许携带凭证
 */
axios.defaults.timeout = 10000
axios.defaults.withCredentials = true

/**
 * 设置请求传递数据的格式
 * x-www-form-urlencoded
 */
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'
axios.defaults.transformRequest = data => qs.stringify(data)

/**
 * 设置请求拦截器
 */
axios.interceptors.request.use(config => {
  // 携带上token
  const token = localStorage.getItem('token')
  token && (config.headers.Authorization = token)
  return config
}, error => {
  return Promise.reject(error)
})

/**
 * 响应拦截器
 * 服务器返回信息 -> [拦截的统一处理] -> 客户端js获取到的信息
 */
axios.defaults.validateStatus = status => {
  // 自定义响应成功的HTTP状态码
  return /^(2|3)\d{2}$/.test(status)
}
axios.interceptors.response.use(response => {
  return response.data
}, error => {
  const {
    response
  } = error
  if (response) {
    // 服务器有结果
    switch (response.status) {
      case 401: // 权限
        break
      case 403: // 服务器拒绝执行（token过期）
        localStorage.removeItem('token')
        break
      case 404: // 找不到页面
        break
    }
  } else {
    // 服务器没结果
    if (!window.navigator.onLine) {
      // 断网处理
      return
    }
    return Promise.reject(error)
  }
})

export default axios

